use std::path::PathBuf;
use actix_web::{post, web::{
    self,
    route
}, App, FromRequest, HttpResponse, HttpServer};
use log::LevelFilter;
use crate::response::api_response::ApiResponse;

mod config;
mod interceptor;
mod api;
mod response;

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    println!("actix-web-example starting...");

    // 设置日志文件路径
    let log_file_path = PathBuf::from("/actix-web-example");

    // 初始化日志配置
    config::log4rs::init(LevelFilter::Debug, "test".to_string(), log_file_path, true);

    // 创建并启动 HTTP 服务器
    let server = HttpServer::new(|| {
        App::new() // 创建新的应用实例
            .route("/test", web::get().to(test_handler)) // 添加测试路由
            .service(
                web::scope("")
                    .service(login)
                    .app_data(
                        web::JsonConfig::default().error_handler(interceptor::error_handler::json_error_handler),
                    )
                    .wrap(interceptor::interceptor::AuthenticationMiddleware) // 添加前置拦截器中间件
            )

        // .route("/info", web::post().to(get_info)) // 添加信息路由（注释掉）
        // .route("/public", web::post().to(get_public_info)) // 添加公共信息路由（注释掉）
    }).bind("127.0.0.1:8000")?.run(); // 运行服务器

    log::info!("Actix server running at http://127.0.0.1:8000");
    server.await // 等待服务器完成
}

// 测试处理器函数
async fn test_handler() -> &'static str {
    "Hello, world!" // 返回测试响应
}

#[post("/api/login")]
pub async fn login()  -> HttpResponse {
    ApiResponse::success("login success")
}